package com.meicet.evmskin

import org.junit.Test
import java.lang.reflect.InvocationHandler
import java.lang.reflect.Proxy

//java 动态代理
class ProxyDemo {

    @Test
    fun testProxy(){
        //目标对像
        val person:IMarry=Person()
        //代理对像
        val marryProxy:IMarry=Proxy.newProxyInstance(
            person.javaClass.classLoader,//目标类加载器
        person.javaClass.interfaces,//目标类所实现的所有接口
            InvocationHandler { //内部匿名类
                    //proxy 代理对像
                    //method 目标方法
                    //args 目标方法的参数列表
                    proxy, method, args ->
                println("method=${method.defaultValue}")
               return@InvocationHandler method?.invoke(person,args)

            }) as IMarry

        marryProxy.marry()
    }


}

interface IMarry{
    fun marry()
}
class Person:IMarry{
    override fun marry() {
        println("Person")
    }
}